// main.js 项目的起点文件 项目从此处开始逐一向下执行
import '@/components/VxeTable/src/css/index.scss';
import '@/design/index.less';
import 'ant-design-vue/dist/antd.less';
import 'uno.css';
// Register icon sprite
import 'virtual:svg-icons-register';

import { createApp } from 'vue';

import { registerGlobComp } from '@/components/registerGlobComp';
import { setupGlobDirectives } from '@/directives';
import { setupI18n } from '@/locales/setupI18n';
import { setupErrorHandle } from '@/logics/error-handle';
import { initAppConfigStore } from '@/logics/initAppConfig';
import { router, setupRouter } from '@/router';
import { setupRouterGuard } from '@/router/guard';
import { setupStore } from '@/store';

import App from './App.vue';

async function bootstrap() {
  // createApp() 用于创建vue实例
  const app = createApp(App);

  // 配置 store：用于定义注册全局共享的状态
  setupStore(app);

  // 初始化内部系统配置
  initAppConfigStore();

  // 注册全局组件
  registerGlobComp(app);

  // 多语言配置
  // 异步案例：语言文件可能从服务器端获取 
  // I18n：表示Internal国际化
  await setupI18n(app);  // await：此处是异步的，等此处异步的做完再做后边其他的事情

  // 配置路由
  setupRouter(app);

  // 路由守卫  在路由钩子中实现自定义逻辑，如登录逻辑的校验，没有token的话回到登录页
  setupRouterGuard(router);

  // 注册全局指令  与权限相关，
  setupGlobDirectives(app);

  // 配置全局错误处理
  setupErrorHandle(app);

  // https://next.router.vuejs.org/api/#isready
  // await router.isReady();

  // DOM的渲染
  app.mount('#app');
}

bootstrap();
